home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / winlib3.zip / MENU.H < prev    next >
Text File  |  1991-01-15  |  10KB  |  293 lines

  1. #if !defined (MENU_DEF)
  2. #define MENU_DEF  1
  3. #include <window.h>
  4. #include <bstring.h>
  5. #undef PROTO_DEF
  6. #include <proto.h>
  7.  
  8. #ifndef UNKNOWNARGS
  9. #ifndef __cplusplus
  10. #define UNKNOWNARGS
  11. #else
  12. #define UNKNOWNARGS ...
  13. #endif
  14. #endif
  15.  
  16. #if defined (MENU_GLOBAL_DEF)
  17. #define MENU_EXTERN
  18. #else
  19. #define MENU_EXTERN  extern
  20. #endif
  21.  
  22. /* define offsets for pop-up menu keys */
  23.  
  24. #define POPUP_UPKEY              0
  25. #define POPUP_DOWNKEY            1
  26. #define POPUP_ACCEPTKEY          2
  27. #define POPUP_QUITKEY            3
  28. #define POPUP_HOMEKEY            4
  29. #define POPUP_ENDKEY             5
  30. #define POPUP_RIGHTKEY           6
  31. #define POPUP_LEFTKEY            7
  32. #define POPUP_PULLDOWN_QUITKEY   8
  33.  
  34. #define NUMPOPUPKEYS     9
  35.  
  36. #define POPUP_EXIT          1
  37. #define BAR_EXIT            2
  38. #define PULLDOWN_EXIT       3
  39. #define PULLDOWN_POPUP_EXIT 4
  40. #define PULLDOWN_CONTINUE   5
  41.  
  42. /* define offsets for bar menu keys */
  43. #define BAR_RIGHTKEY           0
  44. #define BAR_LEFTKEY            1
  45. #define BAR_ACCEPTKEY          2
  46. #define BAR_QUITKEY            3
  47. #define BAR_HOMEKEY            4
  48. #define BAR_ENDKEY             5
  49.  
  50. #define NUMBARKEYS     6
  51.  
  52.  
  53. #define BARWRAP      1
  54. #define BARSTATIC    2
  55. #define BARCONFIRM   4
  56. #define BARDISPLAY   8
  57. #define BAROVERRIDE  16
  58.  
  59. #define POPUPWRAP      1
  60. #define POPUPSTATIC    2
  61. #define POPUPCONFIRM   4
  62. #define POPUPDISPLAY   8
  63. #define POPUPOVERRIDE  16
  64.  
  65. /**********  Popup return values for user-defined functions **********/
  66.  
  67. #define POPUP_CONTINUE      0
  68. #define POPUP_MOVE_UP       1
  69. #define POPUP_MOVE_DOWN     2
  70. #define POPUP_DO_CHOICE     3
  71. #define POPUP_MOVE_CONTINUE 4
  72. #define POPUP_ESCAPE        5
  73. #define POPUP_MOVE_LEFT     6
  74. #define POPUP_MOVE_RIGHT    7
  75. #define POPUP_MOVE_HOME     8
  76. #define POPUP_MOVE_END      9
  77. #define POPUP_PULLDOWN_QUIT 10
  78.  
  79. /**********  Bar return values for user-defined functions **********/
  80.  
  81. #define BAR_CONTINUE         0
  82. #define BAR_MOVE_RIGHT       1
  83. #define BAR_MOVE_LEFT        2
  84. #define BAR_DO_CHOICE        3
  85. #define BAR_MOVE_CONTINUE    4
  86. #define BAR_ESCAPE           5
  87. #define BAR_MOVE_HOME        6
  88. #define BAR_MOVE_END         7
  89.  
  90. #define MOVE_CONTINUE_DONE   -1
  91.  
  92. #define ENTRYCOLOR       0
  93. #define BORDERCOLOR      1
  94. #define HOTKEYCOLOR      2
  95. #define HIGHLIGHTCOLOR   3
  96. #define UNAVAILCOLOR     4
  97.  
  98. #define NUMPOPUPCOLORS 5
  99. #define NUMBARCOLORS   5
  100.  
  101. typedef struct
  102. {
  103.   unsigned int wrap_around:1;   /* menu highlight bar wrap */
  104.   unsigned int static_menu:1;   /* menu is displayed while performing
  105.                                  * function */
  106.   unsigned int confirm_flag:1;  /* confirmation function when hotkey is
  107.                                  * pressed */
  108.   unsigned int open_flag:1;     /* menu is activated ? */
  109.   unsigned int pulldown_flag:1; /* menu is part of pulldown system? */
  110.   unsigned int display_flag:1;  /* menu is displayed even after exiting? */
  111.   unsigned int override:1;      /* unavailable entries are still processed? */
  112. } POPUP_MENU_STATUS, BAR_MENU_STATUS;
  113.  
  114.  
  115. typedef struct
  116. {
  117.   char *entry_name;
  118.   unsigned row;
  119.   char hotkey_letter;
  120.   unsigned int ext_hotkey;
  121.   int (*func)(UNKNOWNARGS);
  122. } POPUP_MENU_ENTRY;
  123.  
  124.  
  125. typedef struct popmenu
  126. {
  127.   WPOINTER w;
  128.   POPUP_MENU_ENTRY *menu_select;
  129.   unsigned menu_color[NUMPOPUPCOLORS];
  130.   unsigned menu_key[NUMPOPUPKEYS];
  131.   POPUP_MENU_STATUS popmenu_flags;
  132.   BITSTRING active_entry;
  133.   int pwidth;
  134.   unsigned last_entry;
  135.   int exp_method;
  136.   int (*confirm_func)(struct popmenu *, unsigned);
  137. } POPUP_MENU, *POPUP_MENU_PTR;
  138.  
  139.  
  140.  
  141. #define POPUP_WRAP_ON(p)              (p)->popmenu_flags.wrap_around
  142. #define POPUP_STATIC_ON(p)            (p)->popmenu_flags.static_menu
  143. #define POPUP_EXPLODE(p)              (p)->popmenu_flags.explode_flag
  144. #define POPUP_CONFIRM_ON(p)           (p)->popmenu_flags.confirm_flag
  145. #define POPUP_OPEN(p)                 (p)->popmenu_flags.open_flag
  146. #define POPUP_PULLDOWN_ON(p)          (p)->popmenu_flags.pulldown_flag
  147. #define POPUP_DISPLAY_ON(p)           (p)->popmenu_flags.display_flag
  148. #define POPUP_OVERRIDE_ON(p)          (p)->popmenu_flags.override
  149.  
  150. void menu_init();
  151.  
  152. typedef struct
  153. {
  154.   char *entry_name;
  155.   int row;
  156.   int col;
  157.   unsigned char hotkey_letter;
  158.   unsigned int ext_hotkey;
  159.   int (*func)(UNKNOWNARGS);
  160. } BAR_MENU_ENTRY;
  161.  
  162.  
  163.  
  164. typedef struct barmenu
  165. {
  166.   WPOINTER w;
  167.   BAR_MENU_ENTRY *menu_select;
  168.   unsigned menu_color[NUMBARCOLORS];
  169.   unsigned menu_key[NUMBARKEYS];
  170.   BAR_MENU_STATUS barmenu_flags;
  171.   BITSTRING active_entry;
  172.   int *width;
  173.   int exp_method;
  174.   unsigned last_entry;
  175.   int (*confirm_func)(struct barmenu *, unsigned);
  176. } BAR_MENU, *BAR_MENU_PTR;
  177.  
  178.  
  179.  
  180.  
  181.  
  182. #define BAR_WRAP_ON(b)              (b)->barmenu_flags.wrap_around
  183. #define BAR_STATIC_ON(b)            (b)->barmenu_flags.static_menu
  184. #define BAR_EXPLODE(b)              (b)->barmenu_flags.explode_flag
  185. #define BAR_CONFIRM_ON(b)           (b)->barmenu_flags.confirm_flag
  186. #define BAR_OPEN(b)                 (b)->barmenu_flags.open_flag
  187. #define BAR_DISPLAY_ON(b)           (b)->barmenu_flags.display_flag
  188. #define BAR_OVERRIDE_ON(b)          (b)->barmenu_flags.override
  189. #define BAR_PULLDOWN_ON(b)          (b)->barmenu_flags.pulldown_flag
  190.  
  191.  
  192. typedef struct pullmenu
  193. {
  194.   BAR_MENU_PTR barmenu;
  195.   POPUP_MENU_PTR *popupmenu;
  196. }  PULLDOWN_MENU, *PULLDOWN_MENU_PTR;
  197.  
  198. PULLDOWN_MENU_PTR  CreatePulldownMenu();
  199. /* Up to here */
  200.  
  201. MENU_EXTERN int (*popup_undef_key) P((POPUP_MENU_PTR p, unsigned key,
  202.                                      unsigned *entry));
  203. MENU_EXTERN int (*bar_undef_key) P((BAR_MENU_PTR b, unsigned key,
  204.                                     unsigned *entry));
  205. MENU_EXTERN void (*global_bar_prefunc) P((BAR_MENU_PTR, unsigned));
  206. MENU_EXTERN void (*global_popup_prefunc) P((POPUP_MENU_PTR, unsigned));
  207.  
  208. MENU_EXTERN unsigned popup_key_definition[NUMPOPUPKEYS];
  209. MENU_EXTERN unsigned bar_key_definition[NUMBARKEYS];
  210.  
  211.  
  212. #if __cplusplus
  213.    extern "C"
  214.       {
  215. #endif
  216.  
  217. int               BarAssignColors P((BAR_MENU_PTR barptr, unsigned *colors));
  218. int               BarAssignKeys P((BAR_MENU_PTR barptr, unsigned *keys));
  219. int               BarChangeEntryString P((BAR_MENU_PTR barptr, unsigned entry,
  220.                                           char *string));
  221. BAR_MENU_PTR      BarCreateMenu P((BAR_MENU_ENTRY *entries, unsigned *colors,
  222.                                   int row, int col, WPOINTER (*wfunc)(void)));
  223.  
  224. int               BarMakeEntryAvailable P((BAR_MENU_PTR barptr, unsigned entry));
  225. int               BarMakeEntryUnavailable P((BAR_MENU_PTR barptr, unsigned entry));
  226. int               BarMenuFree P((BAR_MENU_PTR barptr));
  227. int               BarSetExplosionType P((BAR_MENU_PTR barptr, int effect));
  228. int               BarSetOptions P((BAR_MENU_PTR barptr, int options, int flag));
  229. int               BarSelectMenu P((BAR_MENU_PTR barptr, int rank,
  230.                                    unsigned entry));
  231. int               BarSetConfirmFunction P((BAR_MENU_PTR barptr,
  232.                                            int (*cfunc)(BAR_MENU_PTR, unsigned)));
  233.  
  234. int               PopupAssignColors P((POPUP_MENU_PTR popptr, unsigned *colors));
  235. int               PopupAssignKeys P((POPUP_MENU_PTR popptr, unsigned *keys));
  236.  
  237. POPUP_MENU_PTR    PopupCreateMenu P((POPUP_MENU_ENTRY *entries, unsigned *colors,
  238.                                      unsigned row, unsigned col, int wheight,
  239.                                      WPOINTER (*wfunc)(void),
  240.                                      VWPOINTER (*vwfunc)(void)));
  241.  
  242. int               PopupMakeEntryAvailable P((POPUP_MENU_PTR popptr,
  243.                                              unsigned entry));
  244. int               PopupMakeEntryUnavailable P((POPUP_MENU_PTR popptr,
  245.                                              unsigned entry));
  246.  
  247. int               PopupSelectMenu P((POPUP_MENU_PTR popptr, int rank,
  248.                                      unsigned entry));
  249. int               PopupSetOptions P((POPUP_MENU_PTR popptr, unsigned options,
  250.                                      int flag));
  251.  
  252. int               PopupChangeEntryString P((POPUP_MENU_PTR popptr,
  253.                                             unsigned entry, char *string));
  254. int               PopupSetExplosionType P((POPUP_MENU_PTR popptr, int effect));
  255.  
  256. int               PopupSetConfirmFunction P((POPUP_MENU_PTR popptr,
  257.                              int (*cfunc)(POPUP_MENU_PTR, unsigned)));
  258. int               PopupMenuFree P((POPUP_MENU_PTR popptr));
  259.  
  260. PULLDOWN_MENU_PTR PulldownCreateMenu P((POPUP_MENU_PTR popptrs[],
  261.                                         BAR_MENU_PTR barptr, int adjust));
  262.  
  263. int               PulldownSelectMenu P((PULLDOWN_MENU_PTR pullptr, int rankbar,
  264.                                         unsigned startbar, int *rankpop,
  265.                                         unsigned *startpop,
  266.                                         int imode));
  267.  
  268. int               PulldownMenuFree    P((PULLDOWN_MENU_PTR pullptr));
  269. int               PulldownMenuFreeAll P((PULLDOWN_MENU_PTR pullptr));
  270.  
  271. #if defined (SOURCE)
  272. #include <mintern.h>
  273. #endif
  274. #if __cplusplus
  275.   }
  276. #endif
  277. /* Other defines */
  278. #define       BAR_NULL_PTR      ((BAR_MENU_PTR)0)
  279. #define       POPUP_NULL_PTR    ((POPUP_MENU_PTR)0)
  280. #define       PULLDOWN_NULL_PTR ((PULLDOWN_MENU_PTR)0)
  281. #define       BAR_ENTRY_NULL    ((BAR_MENU_ENTRY *)0)
  282. #define       POPUP_ENTRY_NULL  ((POPUP_MENU_ENTRY *)0)
  283. #define       POPUP_STRING_IN_WINDOW(p,e)  \
  284.      (((p)->w->vwrow+(p)->w->height-1) > ((p)->menu_select[(e)-1].row) ? 1:0)
  285. #define       POPUP_ENTRY_AVAILABLE(p,e) (test_bit(&(p)->active_entry,(e)-1))
  286. #define       POPUP_WINDOW(p)            ((p)->w)
  287. #define       POPUP_VIRTUAL_WINDOW(p)    ((p)->w->vwptr)
  288. #define       POPUP_ENTRY_STRING(p,e)    ((p)->menu_select[(e)-1].entry_name)
  289. #define       BAR_ENTRY_AVAILABLE(b,e)   (POPUP_ENTRY_AVAILABLE((b),(e)))
  290. #define       BAR_WINDOW(b)              ((b)->w)
  291. #define       BAR_ENTRY_STRING(b,e)      ((b)->menu_select[(e)-1].entry_name)
  292. #endif
  293.